/*
 * @Author: your name
 * @Date: 2021-03-28 16:05:34
 * @LastEditTime: 2021-04-15 11:19:21
 * @LastEditors: Please set LastEditors
 * @Description: In User Settings Edit
 * @FilePath: \web\node\src\app.js
 */
import express from "express"
import config from "./config"  //引入全局配置
import nunjucks from "nunjucks"   //引入模板引擎
import indexRouter from "./../route/index"  //引入客户端和后台管理路由
import mongodb from "./../models/index"

import bodyParser from "./../middle_wares/body_parser" //引入数据处理的中间件
import errLog from "./../middle_wares/err_log"     //引入处理错误的中间件
import loginPass from "./../middle_wares/login_pass"  //引入后台系统是否登录中间件

import sowingRouter from "./../route/sowing"     //引入轮播图路由
import userRouter from "./../route/user"     //引入轮播图路由
import sourceRouter from "./../route/source"     //引入轮播图路由


// 引入express-session
import session from 'express-session'
// 引入connect-mongo用于express连接数据库存储session
const MongoStore = require("connect-mongo")(session);

const app = express();

//6.使用session
app.use(session({
    secret:'youjiao',//加密字符串
    name:'youjiao_id',//返回客户端key的名称，默认为connect_sid
    resave:false,//强制保存session，即使它没有变化
    saveUninitialized:true,//强制将未初始化的session存储。当新建一个session且未设定属性或值时，它就处于未初始化状态。在设定cookie前，这对于登录验证，减轻服务器存储压力，权限控制是有帮助的，默认为true
    cookie:{maxAge:1800000 },
    rolling:true, //在每次请求时进行设置cookie，将重置cookie过期时间
    store:new MongoStore({//将session数据存储到mongo数据库中
        url:'mongodb://127.0.0.1/teach', //数据库地址
        touchAfter:24*3600  //多长时间往数据库中更新存储一次，除了在会话数据上更改了某些数据除外
    })
}))


//1.使用静态资源中间件
app.use(express.static(config.publicPath))

//2.配置nunjucks模板引擎
nunjucks.configure(config.viewsPath, {
    autoescape: true,
    express: app,
    noCache:true
});

//5.对数据进行处理
app.use(bodyParser)

//7. 登录中间件
app.use(loginPass)

//3.挂载路由中间件
app.use(indexRouter)
app.use(sowingRouter)
app.use(userRouter)
app.use(sourceRouter)

//4.404界面
app.use((req,res,next)=>{ 
    res.render("404.html")
})

//5.挂载错误中间件
app.use(errLog)

app.listen(3000,()=>{
    console.log("服务器已经启动")
})